
package sismed.negocio.controle;

import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import sismed.dados.hibernate.dao.DAOHibernatePessoa;
import sismed.dao.IDAOPessoa;
import sismed.negocio.modelo.AnalistaSistema;
import sismed.negocio.modelo.Enfermeiro;
import sismed.negocio.modelo.Farmaceutico;
import sismed.negocio.modelo.Medico;
import sismed.negocio.modelo.Paciente;
import sismed.negocio.modelo.Pessoa;

public class ControleOperacoesPessoa {

	//IDAOPessoa daopessoa = new DAOPessoa();
	IDAOPessoa daopessoa = new DAOHibernatePessoa();
	
	public void cadastrarPaciente(Paciente paciente){
		daopessoa.cadastrar(paciente);
	}

	public void cadastrarMedico(Medico medico){
		daopessoa.cadastrar(medico);
	}

	public void cadastrarEnfermeiro(Enfermeiro enfermeiro){
		daopessoa.cadastrar(enfermeiro);
	}

	public void cadastrarFarmaceutico(Farmaceutico farmaceutico){
		daopessoa.cadastrar(farmaceutico);
	}

	public void cadastrarAnalistaSistema(AnalistaSistema analista){
		daopessoa.cadastrar(analista);
	}

	public boolean addCadastroPaciente(String nome, String sexo, String CPF, String RG,
			String naturalidade, String raca, String estadoCivil, String nascimento,
			String profissao, String sangue, String plano, String doador, String endereco,
			String bairro, String municipio, String CEP, String estado, String pais, String login,
			String senha, String email)
	{
		if( validarCadastro(login, CPF) ){	
			Paciente paciente = new Paciente();
			paciente.setNome(nome);
			paciente.setSexo(sexo);
			paciente.setCPF(CPF);
			paciente.setRG(RG);
			paciente.setNaturalidade(naturalidade);
			paciente.setRaca(raca);
			paciente.setEstadoCivil(estadoCivil);
			paciente.setNascimento(nascimento);
			paciente.setProfissao(profissao);
			paciente.setSangue(sangue);
			paciente.setPlano(plano);
			paciente.setDoador(doador);
			paciente.setEndereco(endereco);
			paciente.setBairro(bairro);
			paciente.setMunicipio(municipio);
			paciente.setCEP(CEP);
			paciente.setEstado(estado);
			paciente.setPais(pais);
			paciente.setLogin(login);
			paciente.setSenha(senha);
			paciente.setEmail(email);
			return daopessoa.cadastrar(paciente);	
		}
		else{
			return false;
		}
	}

	public boolean addCadastroMedico(String nome, String sexo, String especialidade,String crm, String CPF, String RG,
			String naturalidade, String raca, String estadoCivil, String nascimento,
			String profissao, String sangue, String plano, String doador, String endereco,
			String bairro, String municipio, String CEP, String estado, String pais, String login,
			String senha, String email)
	{

		Medico medico = new Medico();

		medico.setNome(nome);
		medico.setSexo(sexo);
		medico.setEspecialidade(especialidade);
		medico.setCrm(crm);
		medico.setCPF(CPF);
		medico.setRG(RG);
		medico.setNaturalidade(naturalidade);
		medico.setRaca(raca);
		medico.setEstadoCivil(estadoCivil);
		medico.setNascimento(nascimento);
		medico.setProfissao(profissao);
		medico.setSangue(sangue);
		medico.setPlano(plano);
		medico.setDoador(doador);
		medico.setEndereco(endereco);
		medico.setBairro(bairro);
		medico.setMunicipio(municipio);
		medico.setCEP(CEP);
		medico.setEstado(estado);
		medico.setPais(pais);
		medico.setLogin(login);
		medico.setSenha(senha);
		medico.setEmail(email);

		return daopessoa.cadastrar(medico);	
	}

	public boolean addCadastroFarmaceutico(String nome, String sexo, String coren, String CPF, String RG,
			String naturalidade, String raca, String estadoCivil, String nascimento,
			String profissao, String sangue, String plano, String doador, String endereco,
			String bairro, String municipio, String CEP, String estado, String pais, String login,
			String senha, String email)
	{

			
		Farmaceutico farmaceutico = new Farmaceutico();

		farmaceutico.setNome(nome);
		farmaceutico.setSexo(sexo);		
		farmaceutico.setCrf(coren);
		farmaceutico.setCPF(CPF);
		farmaceutico.setRG(RG);
		farmaceutico.setNaturalidade(naturalidade);
		farmaceutico.setRaca(raca);
		farmaceutico.setEstadoCivil(estadoCivil);
		farmaceutico.setNascimento(nascimento);
		farmaceutico.setProfissao(profissao);
		farmaceutico.setSangue(sangue);
		farmaceutico.setPlano(plano);
		farmaceutico.setDoador(doador);
		farmaceutico.setEndereco(endereco);
		farmaceutico.setBairro(bairro);
		farmaceutico.setMunicipio(municipio);
		farmaceutico.setCEP(CEP);
		farmaceutico.setEstado(estado);
		farmaceutico.setPais(pais);
		farmaceutico.setLogin(login);
		farmaceutico.setSenha(senha);
		farmaceutico.setEmail(email);

		return daopessoa.cadastrar(farmaceutico);	
	}

	public boolean addCadastroEnfermeiro(String nome, String sexo, String coren, String CPF, String RG,
			String naturalidade, String raca, String estadoCivil, String nascimento,
			String profissao, String sangue, String plano, String doador, String endereco,
			String bairro, String municipio, String CEP, String estado, String pais, String login,
			String senha, String email)
	{
		
				
		Enfermeiro enfermeiro = new Enfermeiro();
		
		enfermeiro.setNome(nome);
		enfermeiro.setSexo(sexo);		
		enfermeiro.setCoren(coren);
		enfermeiro.setCPF(CPF);
		enfermeiro.setRG(RG);
		enfermeiro.setNaturalidade(naturalidade);
		enfermeiro.setRaca(raca);
		enfermeiro.setEstadoCivil(estadoCivil);
		enfermeiro.setNascimento(nascimento);
		enfermeiro.setProfissao(profissao);
		enfermeiro.setSangue(sangue);
		enfermeiro.setPlano(plano);
		enfermeiro.setDoador(doador);
		enfermeiro.setEndereco(endereco);
		enfermeiro.setBairro(bairro);
		enfermeiro.setMunicipio(municipio);
		enfermeiro.setCEP(CEP);
		enfermeiro.setEstado(estado);
		enfermeiro.setPais(pais);
		enfermeiro.setLogin(login);
		enfermeiro.setSenha(senha);
		enfermeiro.setEmail(email);
								
		return daopessoa.cadastrar(enfermeiro);	
	}

	public boolean editarPaciente(String id,String nome, String sexo, String CPF, String RG,
			String naturalidade, String raca, String estadoCivil, String nascimento,
			String profissao, String sangue, String plano, String doador, String endereco,
			String bairro, String municipio, String CEP, String estado, String pais, String login,
			String email)
	{
		System.out.println("editarPaciente - controle");
		System.out.println("cpf " + CPF);
		//if(validarCpf(CPF)){
		if(true){
			
			System.out.println("editar paciente - Id paciente " + id);
			Paciente paciente = new Paciente();//new Paciente(Integer.parseInt(id)); // paciente com o mesmo id, mas sem mexer no contador
							
			paciente.setNome(nome);
			paciente.setSexo(sexo);
			paciente.setCPF(CPF);
			paciente.setRG(RG);
			paciente.setNaturalidade(naturalidade);
			paciente.setRaca(raca);
			paciente.setEstadoCivil(estadoCivil);
			paciente.setNascimento(nascimento);
			paciente.setProfissao(profissao);
			paciente.setSangue(sangue);
			paciente.setPlano(plano);
			paciente.setDoador(doador);
			paciente.setEndereco(endereco);
			paciente.setBairro(bairro);
			paciente.setMunicipio(municipio);
			paciente.setCEP(CEP);
			paciente.setEstado(estado);
			paciente.setPais(pais);
			paciente.setLogin(login);
			paciente.setEmail(email);
									
			return daopessoa.editar(paciente);	
		}
		else{
			return false;
		}
	}
	
	public boolean editarMedico(String id,String nome, String sexo, String especialidade, String CRM, String CPF, String RG,
			String naturalidade, String raca, String estadoCivil, String nascimento,
			String profissao, String sangue, String plano, String doador, String endereco,
			String bairro, String municipio, String CEP, String estado, String pais, String login,
			String email)
	{
		System.out.println("editarMedico - controle");
		System.out.println("cpf " + CPF);
		//if(validarCpf(CPF)){
		if(true){
			
			System.out.println("editar medico - Id medico " + id);
			Medico medico = new Medico();//new Medico(Integer.parseInt(id)); // medico com o mesmo id, mas sem mexer no contador
							
			medico.setNome(nome);
			medico.setSexo(sexo);
			medico.setEspecialidade(especialidade);
			medico.setCrm(CRM);
			medico.setCPF(CPF);
			medico.setRG(RG);
			medico.setNaturalidade(naturalidade);
			medico.setRaca(raca);
			medico.setEstadoCivil(estadoCivil);
			medico.setNascimento(nascimento);
			medico.setProfissao(profissao);
			medico.setSangue(sangue);
			medico.setPlano(plano);
			medico.setDoador(doador);
			medico.setEndereco(endereco);
			medico.setBairro(bairro);
			medico.setMunicipio(municipio);
			medico.setCEP(CEP);
			medico.setEstado(estado);
			medico.setPais(pais);
			medico.setLogin(login);
			medico.setEmail(email);
									
			return daopessoa.editar(medico);	
		}
		else{
			return false;
		}
	}
	
	public boolean editarEnfermeiro(String id,String nome, String sexo, String coren, String CPF, String RG,
			String naturalidade, String raca, String estadoCivil, String nascimento,
			String profissao, String sangue, String plano, String doador, String endereco,
			String bairro, String municipio, String CEP, String estado, String pais, String login,
			String email)
	{
		System.out.println("editarEnfermeiro - controle");
		System.out.println("cpf " + CPF);
		//if(validarCpf(CPF)){
		if(true){
			System.out.println("editar Enfermeiro - Id enfermeiro " + id);
			Enfermeiro enfermeiro = new Enfermeiro();//new Enfermeiro(Integer.parseInt(id)); // enfermeiro com o mesmo id, mas sem mexer no contador
							
			enfermeiro.setNome(nome);
			enfermeiro.setSexo(sexo);
			enfermeiro.setCoren(coren);
			enfermeiro.setCPF(CPF);
			enfermeiro.setRG(RG);
			enfermeiro.setNaturalidade(naturalidade);
			enfermeiro.setRaca(raca);
			enfermeiro.setEstadoCivil(estadoCivil);
			enfermeiro.setNascimento(nascimento);
			enfermeiro.setProfissao(profissao);
			enfermeiro.setSangue(sangue);
			enfermeiro.setPlano(plano);
			enfermeiro.setDoador(doador);
			enfermeiro.setEndereco(endereco);
			enfermeiro.setBairro(bairro);
			enfermeiro.setMunicipio(municipio);
			enfermeiro.setCEP(CEP);
			enfermeiro.setEstado(estado);
			enfermeiro.setPais(pais);
			enfermeiro.setLogin(login);
			enfermeiro.setEmail(email);
									
			return daopessoa.editar(enfermeiro);	
		}
		else{
			return false;
		}
	}
	
	public boolean editarFarmaceutico(String id,String nome, String sexo, String crf, String CPF, String RG,
			String naturalidade, String raca, String estadoCivil, String nascimento,
			String profissao, String sangue, String plano, String doador, String endereco,
			String bairro, String municipio, String CEP, String estado, String pais, String login,
			String email)
	{
		
		System.out.println("cpf " + CPF);
		//if(validarCpf(CPF)){
		if(true){			
			Farmaceutico farmaceutico = new Farmaceutico(); //new Farmaceutico(Integer.parseInt(id)); // farmaceutico com o mesmo id, mas sem mexer no contador
							
			farmaceutico.setNome(nome);
			farmaceutico.setSexo(sexo);
			farmaceutico.setCrf(crf);
			farmaceutico.setCPF(CPF);
			farmaceutico.setRG(RG);
			farmaceutico.setNaturalidade(naturalidade);
			farmaceutico.setRaca(raca);
			farmaceutico.setEstadoCivil(estadoCivil);
			farmaceutico.setNascimento(nascimento);
			farmaceutico.setProfissao(profissao);
			farmaceutico.setSangue(sangue);
			farmaceutico.setPlano(plano);
			farmaceutico.setDoador(doador);
			farmaceutico.setEndereco(endereco);
			farmaceutico.setBairro(bairro);
			farmaceutico.setMunicipio(municipio);
			farmaceutico.setCEP(CEP);
			farmaceutico.setEstado(estado);
			farmaceutico.setPais(pais);
			farmaceutico.setLogin(login);
			farmaceutico.setEmail(email);
									
			return daopessoa.editar(farmaceutico);	
		}
		else{
			return false;
		}
	}
	
	public boolean editarAnalista(String id,String nome, String sexo, String crea, String CPF, String RG,
			String naturalidade, String raca, String estadoCivil, String nascimento,
			String profissao, String sangue, String plano, String doador, String endereco,
			String bairro, String municipio, String CEP, String estado, String pais, String login,
			String email)
	{
		System.out.println("editarAnalista - controle");
		System.out.println("cpf " + CPF);
		//if(validarCpf(CPF)){
		if(true){
			System.out.println("editar Analista - Id analista " + id);
			AnalistaSistema analista = new AnalistaSistema(); //new AnalistaSistema(Integer.parseInt(id)); // Analista com o mesmo id, mas sem mexer no contador
							
			analista.setNome(nome);
			analista.setSexo(sexo);
			analista.setCrea(crea);
			analista.setCPF(CPF);
			analista.setRG(RG);
			analista.setNaturalidade(naturalidade);
			analista.setRaca(raca);
			analista.setEstadoCivil(estadoCivil);
			analista.setNascimento(nascimento);
			analista.setProfissao(profissao);
			analista.setSangue(sangue);
			analista.setPlano(plano);
			analista.setDoador(doador);
			analista.setEndereco(endereco);
			analista.setBairro(bairro);
			analista.setMunicipio(municipio);
			analista.setCEP(CEP);
			analista.setEstado(estado);
			analista.setPais(pais);
			analista.setLogin(login);
			analista.setEmail(email);
									
			return daopessoa.editar(analista);	
		}
		else{
			return false;
		}
	}
	
	public boolean alterarSenha(String id,String senhaAtual, String senhaNova)
	{				
													
			return daopessoa.alterarSenha(id,senhaAtual,senhaNova);							
	}
	
	public List<Pessoa> recuperarListaPessoas() {
		return daopessoa.recuperarListaPessoas();
	}

	public Pessoa recuperarPessoa(String idPessoa) {
		return daopessoa.recuperarPessoa(Integer.parseInt(idPessoa));
	}

	public Pessoa login(String login, String senha){
		return daopessoa.login(login, senha);
	}

	public boolean validarCadastro(String login, String cpf){
		System.out.println("validarcadastro()");
		if(validarLogin(login)){
			if(validarCpf(cpf)){
				return true;
			}
			else{
				System.out.println("cpf ja existe ou formado invalido");
				return false;
			}
		}
		else{
			System.out.println("login ja existe");
			return false;
		}

	}

	public boolean validarLogin(String login){
		List<Pessoa> listaPessoa;
		listaPessoa = recuperarListaPessoas();
		for(int i=0; i<listaPessoa.size(); i++){				
			if(listaPessoa.get(i).getLogin().equalsIgnoreCase(login))
				return false;				
		}
		return true;
	}

	public boolean validarCpf(String cpf){
		Pattern padrao = Pattern.compile("[0-9]{3}\\.[0-9]{3}\\.[0-9]{3}\\-[0-9]{2}");    
		Matcher pesquisa = padrao.matcher(cpf);  

		if (pesquisa.matches()){  	             	
			List<Pessoa> listaPessoa;
			listaPessoa = recuperarListaPessoas();						
			for( int i=0; i<listaPessoa.size(); i++ )
				if(listaPessoa.get(i).getCPF() != null){
					if(listaPessoa.get(i).getCPF().equalsIgnoreCase(cpf))
						return false;				
				}
			return true;
		}
		else
			return false;
	}

	public List<Paciente> recuperarListaPaciente()  {
		
		return daopessoa.recuperarListaPacientes();
	}

	public List<Medico> recuperarListaMedico() {
		return daopessoa.recuperarListaMedicos();
	}
	
	public List<Enfermeiro> recuperarListaEnfermeiros() {
		return daopessoa.recuperarListaEnfermeiros();
	}
	
	public List<Farmaceutico> recuperarListaFarmaceutico() {
		return daopessoa.recuperarListaFarmaceuticos();
	}
	
	public boolean atualizarPessoa( Pessoa pessoa, String id ){
		return daopessoa.atualizarPessoa( pessoa, id );
	}
	
	public boolean excluirPessoa(int idPessoa){
		return daopessoa.excluir(idPessoa);
	}
}
